// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once

#include <string>
#include <list>

#include "../SQLExpr.h"
#include "../SQLExprImpl.h"
#include "../Object.h"
#include "../SQLName.h"

#include "SQLConstraintImpl.h"
#include "SQLColumnConstraint.h"

class SQLASTVisitor;

class SQLColumnReference
    : virtual public SQLConstraintImpl,
      virtual public SQLColumnConstraint
{
public:
  SQLName_ptr table;
  SQLName_list_ptr columns;

  SQLForeignKeyImpl_Match_ptr referenceMatch;
  SQLForeignKeyImpl_Option_ptr onUpdate;
  SQLForeignKeyImpl_Option_ptr onDelete;

  SQLColumnReference();
  SHAREDOBJECT(SQLColumnReference);

  void accept0(SQLASTVisitor_ptr visitor);

  SQLName_ptr getTable();

  void setTable(SQLName_ptr table);

  SQLName_list_ptr getColumns();

  void setColumns(SQLName_list_ptr columns);

  SQLObject_ptr clone() ;

  SQLForeignKeyImpl_Match_ptr getReferenceMatch();

  void setReferenceMatch(SQLForeignKeyImpl_Match_ptr referenceMatch);

  SQLForeignKeyImpl_Option_ptr getOnUpdate();

  void setOnUpdate(SQLForeignKeyImpl_Option_ptr onUpdate);

  SQLForeignKeyImpl_Option_ptr getOnDelete();

  void setOnDelete(SQLForeignKeyImpl_Option_ptr onDelete);
};
